2020-2021 Sunseeker Telemetry and Lighting System
cs_ex3_XT1Fault.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 #include "driverlib.h"
33 
34 //******************************************************************************
58 //******************************************************************************
59 
60 //*****************************************************************************
61 //
62 //Variable to store status of Oscillator fault flags and obtain clock frequency
63 //
64 //
65 //*****************************************************************************
66 uint16_t status;
67 uint32_t clockValue;
68 
69 void main(void)
70 {
71  //Stop WDT
72  WDT_A_hold(WDT_A_BASE);
73 
74  // LED setup
75  //Set P1.0 as an output pin.
76  /*
77 
78  * Select Port 1
79  * Set Pin 0 as output
80  */
81  GPIO_setAsOutputPin(
82  GPIO_PORT_P1,
83  GPIO_PIN0
84  );
85 
86  //Set P3.5 as Output Low.
87  /*
88 
89  * Select Port 3
90  * Set Pin 5 to output Low.
91  */
92  GPIO_setAsOutputPin(
93  GPIO_PORT_P3,
94  GPIO_PIN5
95  );
96 
97  // XT1 Setup
98  //Set PJ.4 and PJ.5 as Primary Module Function Input.
99  /*
100 
101  * Select Port J
102  * Set Pin 4, 5 to input Primary Module Function, XT1.
103  */
104  GPIO_setAsPeripheralModuleFunctionInputPin(
105  GPIO_PORT_PJ,
106  GPIO_PIN4 + GPIO_PIN5,
107  GPIO_PRIMARY_MODULE_FUNCTION
108  );
109 
110  //Set DCO Frequency
111  CS_setDCOFreq(CS_DCORSEL_0,CS_DCOFSEL_3);
112  //Initialize ACLK=XT1 and no CLK DIVIDER set to 1
113  CS_initClockSignal(CS_ACLK,CS_XT1CLK_SELECT,CS_CLOCK_DIVIDER_1);
114  //Initialize SMCLK=DCOCLK and no CLK DIVIDER set to 2
115  CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_2);
116  //Initialize MCLK=DCOCLK and no CLK DIVIDER set to 2
117  CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_2);
118  //Set XT1 frequency
119  CS_setExternalClockSource(32768,0);
120  //Start XT1 external crystal
121  CS_turnOnXT1(CS_XT1_DRIVE_0);
122 
123 
124  SFR_clearInterrupt(SFR_OSCILLATOR_FAULT_INTERRUPT);
125  // Now that XT1OSC is running, enable fault interrupt
126  SFR_enableInterrupt(SFR_OSCILLATOR_FAULT_INTERRUPT);
127 
128  //Set P2.0 as Output Low.
129  /*
130 
131  * Select Port 2
132  * Set Pin 0 to output Low.
133  */
135  GPIO_PORT_P2,
136  GPIO_PIN0
137  );
138 
139  //Set P2.0 as Ternary Module Function Output.
140  /*
141 
142  * Select Port 2
143  * Set Pin 0 to output Ternary Module Function, ACLK.
144  */
145  GPIO_setAsPeripheralModuleFunctionOutputPin(
146  GPIO_PORT_P2,
147  GPIO_PIN0,
148  GPIO_TERNARY_MODULE_FUNCTION
149  );
150 
151 
152  CS_turnOffXT2();
153 
154  clockValue = CS_getSMCLK();
155  clockValue = CS_getMCLK();
156  clockValue = CS_getACLK();
157 
158  __bis_SR_register(LPM3_bits+GIE);
159 
160 }
161 
162 #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
163 #pragma vector=UNMI_VECTOR
164 __interrupt
165 #elif defined(__GNUC__)
166 __attribute__((interrupt(UNMI_VECTOR)))
167 #endif
168 void UNMI_ISR(void)
169 {
170  do
171  {
172  // set a breakpoint on the line below to observe XT1 operating from VLO
173  // when the breakpoint is hit during a crystal fault
174 
175  //Set P1.0 and P3.5 LED on
176  /*
177 
178  * Select Port 1
179  * Set Pin 0 to output high.
180  */
182  GPIO_PORT_P1,
183  GPIO_PIN0
184  );
185 
186  /*
187 
188  * Select Port 3
189  * Set Pin 5 to output high.
190  */
192  GPIO_PORT_P3,
193  GPIO_PIN5
194  );
195 
196  status=CS_clearAllOscFlagsWithTimeout(1000);
197 
198  } while (status);
199 
200  //Clear P1.0 LED off
201  /*
202 
203  * Select Port 1
204  * Set Pin 0 to output Low.
205  */
207  GPIO_PORT_P1,
208  GPIO_PIN0
209  );
210 
211  //Clear P3.5 LED off
212  /*
213 
214  * Select Port 3
215  * Set Pin 5 to output Low.
216  */
218  GPIO_PORT_P3,
219  GPIO_PIN5
220  );
221 
222 }
223 
224 
void UNMI_ISR(void)
uint16_t status
void main(void)
uint32_t clockValue
GPIO_setOutputHighOnPin(GPIO_PORT_LED1|GPIO_PORT_LED2, GPIO_PIN_LED1|GPIO_PIN_LED2)
GPIO_setOutputLowOnPin(GPIO_PORT_LED1|GPIO_PORT_LED2, GPIO_PIN_LED1|GPIO_PIN_LED2)